// stores/modules/wechat.js
import { defineStore } from 'pinia'
import api from '@/api/modules'
import { message } from '@/utils'

export const useWechatStore = defineStore('wechat', {
  state: () => ({
    // 微信绑定状态
    isWechatBound: false,
    // 微信用户信息
    wechatUserInfo: null,
    // 正在检查绑定状态
    isCheckingBinding: false,
    // 正在绑定微信
    isBinding: false
  }),

  getters: {
    // 是否已绑定微信
    isBound: (state) => state.isWechatBound,
    // 微信用户信息
    userInfo: (state) => state.wechatUserInfo
  },

  actions: {
    /**
     * 检查用户是否已绑定微信
     * @param {Number} userId 用户ID
     * @returns {Boolean} 是否已绑定
     */
    async checkWechatBinding(userId) {
      if (!userId) {
        console.error('【微信服务】用户ID不能为空')
        return false
      }

      try {
        console.log('【微信服务】开始检查微信绑定状态, userId:', userId)
        this.isCheckingBinding = true
        
        const res = await api.wechat.checkWechatBinding(userId)
        console.log('【微信服务】检查绑定状态响应:', JSON.stringify(res))
        
        if (res.code === 200 && res.data) {
          this.isWechatBound = res.data.isBound || false
          console.log('【微信服务】微信绑定状态:', this.isWechatBound)
          return this.isWechatBound
        } else {
          console.warn('【微信服务】检查绑定状态失败:', res.message)
          this.isWechatBound = false
          return false
        }
      } catch (error) {
        console.error('【微信服务】检查绑定状态异常:', error)
        this.isWechatBound = false
        return false
      } finally {
        this.isCheckingBinding = false
      }
    },

    /**
     * 微信授权并绑定用户
     * @param {Number} userId 用户ID
     * @returns {Boolean} 绑定是否成功
     */
    async authorizeAndBindWechat(userId) {
      if (!userId) {
        console.error('【微信服务】用户ID不能为空')
        message.error('用户ID不能为空')
        return false
      }

      return new Promise((resolve) => {
        this.isBinding = true
        
        // 调用微信登录接口获取 code
        uni.login({
          provider: 'weixin',
          success: async (loginRes) => {
            if (loginRes.code) {
              try {
                console.log('【微信服务】获取微信code成功，开始绑定')
                
                // 调用绑定接口
                const res = await api.wechat.bindWechatToUser({
                  userId: userId,
                  code: loginRes.code
                })
                
                console.log('【微信服务】绑定响应:', JSON.stringify(res))
                
                if (res.code === 200) {
                  console.log('【微信服务】微信绑定成功')
                  this.isWechatBound = true
                  message.success('微信授权成功')
                  resolve(true)
                } else {
                  console.error('【微信服务】微信绑定失败:', res.message)
                  message.error(res.message || '微信绑定失败')
                  resolve(false)
                }
              } catch (error) {
                console.error('【微信服务】微信绑定请求异常:', error)
                message.error('微信绑定异常')
                resolve(false)
              }
            } else {
              console.error('【微信服务】微信登录失败:', loginRes)
              message.error('微信登录失败')
              resolve(false)
            }
          },
          fail: (error) => {
            console.error('【微信服务】调用微信登录失败:', error)
            message.error('调用微信登录失败')
            resolve(false)
          },
          complete: () => {
            this.isBinding = false
          }
        })
      })
    },

    /**
     * 获取微信用户信息
     * @param {Number} userId 用户ID
     */
    async getWechatUserInfo(userId) {
      if (!userId) {
        console.error('【微信服务】用户ID不能为空')
        return null
      }

      try {
        console.log('【微信服务】开始获取微信用户信息, userId:', userId)
        
        const res = await api.wechat.getUserWechat(userId)
        console.log('【微信服务】获取微信用户信息响应:', JSON.stringify(res))
        
        if (res.code === 200 && res.data) {
          this.wechatUserInfo = res.data
          return res.data
        } else {
          console.warn('【微信服务】获取微信用户信息失败:', res.message)
          return null
        }
      } catch (error) {
        console.error('【微信服务】获取微信用户信息异常:', error)
        return null
      }
    },

    /**
     * 解绑微信账号
     * @param {Number} userId 用户ID
     */
    async unbindWechat(userId) {
      if (!userId) {
        console.error('【微信服务】用户ID不能为空')
        message.error('用户ID不能为空')
        return false
      }

      try {
        console.log('【微信服务】开始解绑微信, userId:', userId)
        
        const res = await api.wechat.unbindWechat(userId)
        console.log('【微信服务】解绑微信响应:', JSON.stringify(res))
        
        if (res.code === 200) {
          console.log('【微信服务】微信解绑成功')
          this.isWechatBound = false
          this.wechatUserInfo = null
          message.success('微信解绑成功')
          return true
        } else {
          console.error('【微信服务】微信解绑失败:', res.message)
          message.error(res.message || '微信解绑失败')
          return false
        }
      } catch (error) {
        console.error('【微信服务】微信解绑异常:', error)
        message.error('微信解绑失败')
        return false
      }
    },

    /**
     * 重置状态
     */
    resetState() {
      this.isWechatBound = false
      this.wechatUserInfo = null
      this.isCheckingBinding = false
      this.isBinding = false
    }
  }
})